`timescale 1ns / 1ps

module imemory_wrap(
    input clk,
    input rst,

    input clk_mem,

    input [31:0] cache_req_addr,
    input [31:0] cache_req_data,
    input cache_req_wen,
    input cache_req_valid,
    output cache_resp_stall,
    output [31:0] cache_resp_data,

    input [9:0] cache_debug_addr,
    output [31:0] cache_debug_data,
    output cache_debug_dirty_bit,
    output [7:0] cache_debug_tag_seq
    );

    wire [31:0] mem_req_addr; 
    wire [31:0] mem_req_data;
    wire mem_req_wen;
    wire mem_req_valid;
    wire mem_resp_valid;
    wire [31:0] mem_resp_data;

    icache_ctrl cache (
        .clk(clk), 
        .clk_mem(clk_mem),
        .rst(rst), 
        .cache_req_addr(cache_req_addr), 
        .cache_req_data(cache_req_data), 
        .cache_req_wen(cache_req_wen), 
        .cache_req_valid(cache_req_valid), 
        .cache_resp_data(cache_resp_data), 
        .cache_resp_stall(cache_resp_stall), 

        .mem_req_addr(mem_req_addr), 
        .mem_req_data(mem_req_data), 
        .mem_req_wen(mem_req_wen), 
        .mem_req_valid(mem_req_valid), 
        .mem_resp_valid(mem_resp_valid), 
        .mem_resp_data(mem_resp_data),

        .cache_debug_addr(cache_debug_addr),
        .cache_debug_data(cache_debug_data),
        .cache_debug_dirty_bit(cache_debug_dirty_bit),
        .cache_debug_tag_seq(cache_debug_tag_seq)
    );

    imem_ctrl mem (
        .clk(clk), 
        .clk_mem(clk_mem),
        .rst(rst), 
        .mem_req_addr(mem_req_addr), 
        .mem_req_data(mem_req_data), 
        .mem_req_wen(mem_req_wen), 
        .mem_req_valid(mem_req_valid), 
        .mem_resp_valid(mem_resp_valid), 
        .mem_resp_data(mem_resp_data)
    );


endmodule
